package com.tools.taskmanage
{
	import flash.utils.getTimer;

	/**
	 * 任务对象
	 * @author Boder
	 * @Time 2011-9-6 16:28:29
	 */
	public class TaskObj
	{

		/** 要执行的任务*/
		public var fun  :  Function      =  null;
		/** 任务名称*/
		public var name  :  String       =  "";
		/** 任务执行参数*/
		public var params  :  Array      =  null;
		/** 执行次数*/
		public var runTimes  :  int      =  -1; //默认不停止
		/** 执行间隔*/
		public var taskDeplay  :  int    =  0; //毫秒值1000等于1秒
		private var nextGapTime  :  int  =  0;
		/** 记录任务管理器起点时间*/
		public var startTime  :  Number  =  0;

		/**
		 * 造函数
		 * @param fn 要执行的任务
		 * @param times 执行次数
		 * @param deplay 时间间隔
		 * @param pms 执行任务时的可选参数
		 *
		 */
		public function TaskObj( fn  :  Function, deplay  :  Number  =  1000, times  :  int  =  -1, pms  :  Array  =  null )
		{
			fun  =  fn;
			runTimes  =  times;
			taskDeplay  =  deplay;
			params  =  pms;
		}

		/**
		 * 执行这个任务
		 * 每执行一次后需要计算剩余执行次数
		 * @param pdx 任务管理器的当前一共跑了多少次
		 */
		public function doTask( pdx  :  int )  :  void
		{
			var i  :  int  =  pdx - startTime;

			if ( i >= taskDeplay - nextGapTime && fun != null )
			{ //到达本任务的执行时间点
				startTime  =  pdx;
				nextGapTime  +=  i - taskDeplay;
				//trace( "看看是否在执行? i  =" + i + " nextGapTime=" + nextGapTime, pdx );
				fun.apply( null, params );
				countLeveTimes(); //计算剩余次数
			}
		}

		/**
		 * 处理任务
		 *
		 */
		private function countLeveTimes()  :  void
		{
			if ( runTimes > 0 )
			{
				runTimes--;
			}

			if ( runTimes == 0 )
			{
				TaskManager.getInstance().removeTask( name );
			}
		}
	}
}
